#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QDir>
#include <QLibrary>
#include<QFormLayout>
#include<QGroupBox>
#include<QLabel>
#include<QCheckBox>
#include <QProgressBar>
#include <QSpinBox>
#include <list>
#include "algorithme.h"


namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow		
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    bool defaultFonction();

private:
    Ui::MainWindow *ui;						
    QDir directory;
    std::list<Algorithme> algorithmes;
    QLayout* affichage;
    Algorithme* algo;
    int nbalgochoisis;						//compte le nombre d'algorithmes qui ont déjà été choisis pour la partie (dé)chiffrement pour le nettoyage
    int k;									//k est une sorte de verrou qui compte le nombre d'algorithmes choisis pour la partie simulation pour faire les affichages et les nettoyages.
    QList<QWidget *> liste;					//la liste des widgets à afficher dans la partie (dé)chiffrement (nom, clés, sortie)
    QList<QWidget *> listeSimu;				//la liste des widgets à afficher dans la partie simulation (noms, clés)
    QLabel* sim;							//le label dans lequel les sorties de la simulation sont écrites
    QPushButton* buttonResult;				//le bouton résultat de la simulation
    QList<QCheckBox *> listebox;			//la liste des algos
    QStringList algos;						//la liste des algos choisis lors de la simulation
    QWidget* labelalgos;					//le label dans lequel les sorties des algorithmes sont écrites
    QString sortie;							//le string de sortie, utilisé uniquement (je crois) pour la defaultfunction
    QList<Algorithme *> algosSimu;			//la liste des algorithmes à utiliser pour la simulation (choix de l'utilisateur)
    bool verrou;							//un verrou pour le nettoyage de la simulation
    bool verroubouton;						//idem
    QPushButton* monBouton;					//bouton dans la partie simulation
    QWidget *fenetre;						//le widget fenetre dans laquelle sont écrites les infos (projet, licence...)
    QProgressBar * barre;                                 // /!\ cette barre n'est pas celle des algorithmes mais celle de la simulation
    QSpinBox * boite;                                   //l'utilisateur choisit le nombre de points
    QString ext;                                        //extention des fichiers pour écrire Cesar au lieu de Cesar.so
    int ongletprecedent;                            //nécessaire pour le nettoyage : il dépend de ce qui était affiché avant
private slots:
    QString getData();
    void chiffre();
    void dechiffre();
    void comboChanged();
    void creationSimulation();
    void chiffresimulation();
    void nettoyage();
    void nettoyageSimu();
    void addAlgoSimu();
    void aide();
    void Qt();
    void projet();
    void licence();
    void help();
};

#endif // MAINWINDOW_H
